home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Internet Tools 1993 July / Internet Tools.iso / RockRidge / mail / pp / pp-6.0 / Lib / util / siginit.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-12-18  |  1.6 KB  |  81 lines

  1. /* signals: catch some disatorous signals */
  2.  
  3. # ifndef lint
  4. static char Rcsid[] = "@(#)$Header: /xtel/pp/pp-beta/Lib/util/RCS/siginit.c,v 6.0 1991/12/18 20:25:18 jpo Rel $";
  5. # endif
  6.  
  7. /*
  8.  * $Header: /xtel/pp/pp-beta/Lib/util/RCS/siginit.c,v 6.0 1991/12/18 20:25:18 jpo Rel $
  9.  *
  10.  * $Log: siginit.c,v $
  11.  * Revision 6.0  1991/12/18  20:25:18  jpo
  12.  * Release 6.0
  13.  *
  14.  */
  15.  
  16.  
  17.  
  18. #include "util.h"
  19. #include <signal.h>
  20.  
  21. #ifndef sigmask
  22. #define sigmask(m) (1<< ((m) - 1))
  23. #endif
  24.  
  25. static SFD onsig ();
  26.  
  27. void siginit ()
  28. {
  29.     int     mask;
  30.  
  31.     mask = sigblock (sigmask(SIGILL) |
  32.              sigmask(SIGFPE) |
  33.              sigmask(SIGBUS) |
  34.              sigmask(SIGSEGV) |
  35.              sigmask(SIGSYS) |
  36.              sigmask(SIGPIPE) );
  37.     (void) signal (SIGILL, onsig);
  38.     (void) signal (SIGFPE, onsig);
  39.     (void) signal (SIGBUS, onsig);
  40.     (void) signal (SIGSEGV, onsig);
  41.     (void) signal (SIGSYS, onsig);
  42.     (void) signal (SIGPIPE, onsig);
  43.     (void) sigsetmask (mask);
  44. }
  45.  
  46. /* ARGSUSED */
  47. #ifdef SYS5
  48. static SFD onsig (sig)
  49. int sig;
  50. #else
  51. static SFD onsig (sig, code, context)
  52. int     sig, code;
  53. struct sigcontext *context;
  54. #endif
  55. {
  56. #ifdef BSD43
  57.     extern char *sys_siglist[];
  58. #endif
  59.  
  60.     (void) signal (sig, SIG_DFL);    /* to stop recursion */
  61.     (void) signal (SIGIOT, SIG_DFL); /* for abort */
  62.     (void) signal (SIGILL, SIG_DFL); /* for abort too */
  63. #ifdef SIGABRT
  64.     (void) signal (SIGABRT, SIG_DFL);
  65. #endif
  66.     (void) sigsetmask (sigblock (0) & ~ (sigmask(SIGILL) | sigmask(SIGIOT)
  67. #ifdef SIGABRT
  68.                          | sigmask(SIGABRT)
  69. #endif
  70.                          ));
  71. #ifndef BSD43
  72.     PP_OPER (NULLCP,
  73.         ("Process dying on signal %d", sig));
  74. #else
  75.     PP_OPER (NULLCP,
  76.         ("Process dying on signal %d (%s)", sig, sys_siglist[sig]));
  77. #endif
  78.     (void) abort ();
  79.     /* NOTREACHED */
  80. }
  81.